name = "全局变量"


def outer():
    name = "外部函数变量"

    def inner():
        name = "内部函数变量"
        print(name)  # 输出"内部函数变量"

    inner()

    print(name)  # 输出"外部函数变量"


outer()

print(name)  # 输出"全局变量"

# global 关键字允许我们在函数内部声明某个变量为全局变量，从而可以在函数内部修改它。


def change_global_name():
    global username
    global x  # 在函数内部声明x为全局变量，这样就可以在函数内部修改它，在函数外部也可以访问到
    x = "新的全局变量"
    username = "jackie"
    print(x)  # 输出"新的全局变量"


change_global_name()
print("username=====", username)  # 输出"jackie"
print("x=====", x)  # 输出"新的全局变量"
x = 10000
print("x=====", x)


# nonlocal nonlocal关键字用于在嵌套函数中声明变量来自最近的一层非全局作用域（外层函数）。
def outer1():
    name = "outer1_外部函数变量"

    def inner1():
        name = "inner1_内部函数变量"
        print(name)  # 输出"内部函数变量"

        def inner2():
            nonlocal name
            print(name)  # 输出"inner1_内部函数变量"

        inner2()

    inner1()

    print(name)  # 输出"内部函数变量"


outer1()
